package com.ddb.demo.test.callback;

/** 
 * 这个是小王 
 * @author xiaanming 
 * 实现了一个回调接口CallBack，相当于----->背景一 
 */  
public class Wang implements CallBack {  
    /** 
     * 小李对象的引用 
     * 相当于----->背景二 
     */  
    private Li li;   
  
    /** 
     * 小王的构造方法，持有小李的引用 
     * @param li 
     */  
    public Wang(Li li){  
        this.li = li;  
    }  
      
    /** 
     * 小王通过这个方法去问小李的问题 
     * @param question  就是小王要问的问题,1 + 1 = ? 
     */  
    public String askQuestion(final String question){  
        //这里用一个线程就是异步，  
        new Thread(new Runnable() {  
            @Override  
            public void run() {  
                /** 
                 * 小王调用小李中的方法，在这里注册回调接口 
                 * 这就相当于A类调用B的方法C 
                 */  
            	System.err.println("给小李提出问题");
                li.executeMessage(Wang.this, question);   
            }  
        }).start();  
          
        //小网问完问题挂掉电话就去干其他的事情了，诳街去了  
        play();  
        return "ok";
    }  
  
    public void play(){  
        System.out.println("我要逛街去了");  
    }  
  
    /** 
     * 小李知道答案后调用此方法告诉小王，就是所谓的小王的回调方法 
     */  
    @Override  
    public void solve(String result) {  
        System.out.println("小李告诉小王的答案是--->" + result);  
    }  
      
   //******************************************************************** 
    /** 
     * 测试类 
     * @author xiaanming 
     * 
     */  
        public static void main(String[]args){  
            /** 
             * new 一个小李 
             */  
            Li li = new Li();  
      
            /** 
             * new 一个小王 
             */  
            Wang wang = new Wang(li);  
              
            /** 
             * 小王问小李问题 
             */  
            String askQuestion = wang.askQuestion("1 + 1 = ?");  
            System.err.println("askQuestion: "+askQuestion);
        }  
        
}  